/* 
 正解：Array.isArray()
 其他： instanceof与 constructor ，  Object.toString都不够准确
*/

Array.isArray([]); // true

Array.isArray(new Array()); // true

Array.isArray({ constructor: Array }); // false

// instanceof与 constructor
const object = { __proto__: Array.prototype };
[] instanceof Array; // true
[].constructor === Array; // true
// 对象也被认为是一个数组了
object instanceof Array; // true
object.constructor === Array; // true

// 正解
Array.isArray(object); // false

// Object.toString，es6后可以篡改，导致toString判不准确
Array.prototype[Symbol.toStringTag] = "篡改数组toString的结果";
Object.prototype.toString.call([]); // '[object 篡改数组toString的结果]'

Array.isArray([]); // true

// 再比如跨领域对象问题，当前页面的Array与iframe下的Array不同：
const iframe = document.createElement("iframe");
document.body.appendChild(iframe);
const xArray = window.frames[window.frames.length - 1].Array;
const arr = new xArray(1, 2, 3);

arr instanceof Array; // false
Array.isArray(arr); // true
